import axios from 'axios';
import router from '@/router';

const TOKEN_KEY = 'access_token';
const USER_ROLE_KEY = 'user_role';

// 设置Token到请求头
export function setAuthToken(token) {
  if (token) {
    axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
    localStorage.setItem(TOKEN_KEY, token);
  } else {
    delete axios.defaults.headers.common['Authorization'];
    localStorage.removeItem(TOKEN_KEY);
  }
}

// 获取本地存储的Token
export function getAuthToken() {
  return localStorage.getItem(TOKEN_KEY);
}

// 设置用户角色
export function setUserRole(role) {
  if (role) {
    localStorage.setItem(USER_ROLE_KEY, role);
  } else {
    localStorage.removeItem(USER_ROLE_KEY);
  }
}

// 获取用户角色
export function getUserRole() {
  return localStorage.getItem(USER_ROLE_KEY);
}

// 检查是否已认证
export function isAuthenticated() {
  const token = getAuthToken();
  return !!token;
}

// 检查Token是否过期
export function isTokenExpired() {
  const token = getAuthToken();
  if (!token) return true;
  
  try {
    // 解析Token过期时间
    const payload = JSON.parse(atob(token.split('.')[1]));
    const exp = payload.exp;
    return Date.now() >= exp * 1000;
  } catch (error) {
    // 如果解析失败，认为Token已过期
    return true;
  }
}

// 登录
export function login(username, password) {
  return axios.post('/admin/login', { username, password })
    .then(response => {
      // 处理两种可能的响应格式
      let responseData;
      
      // 如果response.data存在且有code属性，说明是处理后的数据
      if (response && response.data && response.data.code !== undefined) {
        responseData = response.data;
      } 
      // 如果response本身有code属性，说明是原始响应
      else if (response && response.code !== undefined) {
        responseData = response;
      } 
      // 否则抛出错误
      else {
        throw new Error('登录响应数据格式错误');
      }
      
      const { code, message, data } = responseData;
      
      // 检查响应码
      if (code !== 200) {
        throw new Error(message || '登录失败');
      }
      
      // 检查data是否存在且包含token和user
      if (!data || !data.token || !data.user) {
        throw new Error('登录响应中缺少必要的认证信息');
      }
      
      const { token, user } = data;
      
      // 保存Token到本地存储
      setAuthToken(token);
      
      // 保存用户角色
      if (user && user.role) {
        setUserRole(user.role);
      }
      
      return responseData;
    })
    .catch(error => {
      // 清除可能存在的认证信息
      setAuthToken(null);
      setUserRole(null);
      // 重新抛出错误
      console.error('登录错误:', error);
      throw error;
    });
}

// 登出
export function logout() {
  return axios.post('/admin/logout')
    .then(response => {
      // 清除本地存储的Token和角色
      setAuthToken(null);
      setUserRole(null);
      return response.data;
    })
    .catch(error => {
      // 即使后端登出失败，也要清除本地Token和角色
      setAuthToken(null);
      setUserRole(null);
      // 返回一个标准的成功响应
      return { code: 200, message: 'success' };
    });
}